rm(list = ls(all = TRUE)) #limpiar workspace
setwd("~/Contra_el_Hambre/REPLICA")

## ---------------------------
# Pobreza por municipio 2010
# Fuente: http://www.coneval.gob.mx/Informes/Pobreza/Pobreza_municipal/pobreza%20extrema%20y%20alimentacion%20por%20municipio.zip
## ---------------------------
coneval <- read.table("CONEVAL.txt", header=TRUE, sep="\t")
coneval$ID <- sprintf("%05s", coneval$Clave.de.municipio)
summary(coneval)

## ---------------------------
## Municipios Contra el Hambre
## Fuente: http://es.wikipedia.org/wiki/Anexo:Municipios_de_la_Cruzada_contra_el_Hambre
## ---------------------------
library(XML)
url<- "http://es.wikipedia.org/wiki/Anexo:Municipios_de_la_Cruzada_contra_el_Hambre"
cruzada <- readHTMLTable(url, skip.rows=1:2)
cruzada <- as.data.frame(cruzada)
cruzada <- rbind(as.matrix(cruzada[,1:3]),as.matrix(cruzada[,4:6]))
cruzada <- data.frame(ID=cruzada[,1], cruzada=rep(1, nrow(cruzada)))
summary(cruzada)

## ---------------------------
## IDH
## Fuente: http://www.undp.org.mx/desarrollohumano/disco/index.html
## ---------------------------
IDH <- read.table("IDH.txt", header=TRUE, sep="\t", na.strings="n.d")
IDH$ID <- sprintf("%05s", IDH$Clave.municipio)
IDH <- IDH[, c("ID", "IDH")]
summary(IDH)

## ---------------------------
## Participacion
## Fuente: http://computos2012.ife.org.mx/reportes/presidente/distritalPresidenteEF.html
## Homologacion claves: https://github.com/diegovalle/download-maps12
## ---------------------------
# Computos distritales
computo <- read.table("datos_computos_casillas_presidente.txt", header=TRUE, sep = "|")
computo <- aggregate(computo[,c("LISTA_NOMINAL","NUMERO_VOTOS_VALIDOS")], 
                     by=computo[c("ID_ESTADO", "ID_MUNICIPIO")], 
                     sum, na.rm = TRUE)
computo$participacion <- computo$NUMERO_VOTOS_VALIDOS/computo$LISTA_NOMINAL
computo$id.ife <- paste(sprintf("%02s", computo$ID_ESTADO), 
                        sprintf("%03s", computo$ID_MUNICIPIO), 
                        sep="")
computo <- computo[, c("participacion","id.ife")]

# Clave INEGI
ife.to.inegi <- read.table("ife.to.inegi.csv", header=TRUE, sep = ",")
ife.to.inegi$id.inegi <- sprintf("%05s", ife.to.inegi$id.inegi)
ife.to.inegi$id.ife <- sprintf("%05s", ife.to.inegi$id.ife)
names(ife.to.inegi)[names(ife.to.inegi)=="id.inegi"] <- "ID"

# Merge
participacion <- merge(computo, ife.to.inegi, by="id.ife", all.x= TRUE)

## --------------------------
## Merge and create variables
## --------------------------
# Coneval y Cruzada
data <- merge(coneval, cruzada, by="ID", all.x=TRUE)
data$cruzada[is.na(data$cruzada)] <- 0
data$cruzada <- as.factor(data$cruzada)

# IDH
data <- merge(data, IDH, by="ID", all.x=TRUE)

# Participacion
data <- merge(data, participacion[, c("ID", "participacion")], 
              by="ID", all.x=TRUE)
data <- merge(data, participacion[, c("id.ife", "participacion")], 
              by.x="ID", by.y="id.ife", all.x=TRUE)

# Capitales
tmp <- c("03003" ,"06002","08019","11015","13048","16053",
         "18017","23005","26030","28038","29033","32056")
data$capital <- 0
data$capital[data$ID %in% tmp] <- 1
data$capital[data$Clave.de.entidad==9] <- 1

# Categorías de Poblacion
data$cat.Pob <- cut(data$Poblacion, 
                    breaks=c(0,50000, 100000,250000,500000, max(data$Poblacion, na.rm=TRUE)), 
                    include.lowest=TRUE)

# Estados con Eleccion
tmp <- c(1,2,5,8,10,20,21,23,25,28,29,30,32)
data$eleccion <- 0
data$eleccion[data$Clave.de.entidad %in% tmp] <- 1


summary(data)
# Extraer datos para archivo de replicación
write.table(data, "data.out.txt", sep=",", na=".", row.names=FALSE)

## -----------------------
## Modelo
## -----------------------
library(arm)

## Replicar modelo
replica <- lm(as.numeric(cruzada) ~ 
                log(Poblacion) + 
                log(Extrema) + 
                as.factor(capital) +
                IDH +
                as.factor(eleccion) +
                participacion.y +
                as.factor(cat.Pob) +
                as.factor(Clave.de.entidad),
              data=data)
display(replica, digits=3)

